#ifndef CRYPTOTOOL_H
#define CRYPTOTOOL_H

#include <map>
#include <variant>
#include <stdint.h>
#include <stdio.h>



class CryptoTool
{
 public:

  enum CryptoType{
    CryptoSM2Encrypt,
    CryptoSM2Decrypt,
    CryptoSM2ZEncrypt,
    CryptoSM2ZDecrypt,
    CryptoSM2Verify,
    CryptoSM2Sign,
    CryptoSM3Digest,
    CryptoSM3HMac,
    CryptoCount
  };

  CryptoTool();

  void SM2Encrypt(const char* pub_key_path,
                  const uint8_t* in,
                  size_t in_len,
                  uint8_t* out,
                  size_t* out_len
                  );
  void SM2Decrypt(const char* priv_key_path,
                  const uint8_t* in,
                  size_t in_len,
                  uint8_t* out,
                  size_t* out_len
                  );

  void SM2ZEncrypt();
  void SM2ZDecrypt();
  void SM2Sign();
  void SM2Verify();

  void SM3Digest();
  void SM3HMac();

  const char* GetDesc(CryptoType type);

 private:


};

#endif // CRYPTOTOOL_H
